import tkinter as tk
import webbrowser
import re
import requests
import json
from tkinter import messagebox

VIDEO_URL_REGEX = r'<iframe sandbox="allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-orientation-lock allow-same-origin allow-scripts" src="(.*?)" class="iframeStyle" id="myiframe" allowfullscreen="true">'


# 新增通用处理函数
def process_api(link):
    try:
        html_data = requests.get(link).text
        video_url = re.findall(VIDEO_URL_REGEX, html_data)[0]
        print(video_url)
        webbrowser.open(video_url)
    except IndexError:
        messagebox.showerror('错误', '视频解析失败，请尝试其他接口')
    except Exception as e:
        messagebox.showerror('错误', f'请求发生错误: {str(e)}')


# 创建一个窗口
root = tk.Tk()
# 设置窗口大小
root.geometry('800x370+200+200')  # 前面是大小后面是相对位置
# 设置标题
# 全局读取配置文件
with open('config.json', encoding='utf-8') as f:
    config = json.load(f)


def show():
    # 获取接口
    num = num_int_var.get()
    # 获取解析地址
    url_ = input_va.get()
    if url_[:4] != 'http':
        tk.messagebox.showerror('错误', '请输入正确的网址')
        return
    # 使用全局配置
    api_urls = {int(k): v for k, v in config['api_urls'].items()}

    if num in api_urls:
        link = api_urls[num]['url'] + url_
        process_api(link)
    else:
        print('选择错误')


root.title('在线观看电影软件')
# 读取一张图片
img = tk.PhotoImage(file='img\\Capture001.png')
# 布局照片
tk.Label(root, image=img).pack()
# 设置标签框
choose_frame = tk.LabelFrame(root)
choose_frame.pack(pady=10, fill='both')
tk.Label(choose_frame, text='选择接口:', font=('黑体', 20)).pack(side=tk.LEFT)
# 设置可变变量
num_int_var = tk.IntVar()
# 设置默认选项
num_int_var.set(1)
# 设置选择
# 从配置文件动态生成通道选项
api_urls = {int(k): v for k, v in config['api_urls'].items()}
for num, config_data in sorted(api_urls.items()):
    text = config_data.get('name', f'{num}号通道')
    tk.Radiobutton(choose_frame, text=text, variable=num_int_var,
                   value=num, font=('黑体', 15)).pack(side=tk.LEFT, padx=5)
# tk.Radiobutton(choose_frame,text='7号通道',variable=num_int_var,value=3,font=('黑体',15)).pack(side=tk.LEFT)

# 输入标签框
input_frame = tk.LabelFrame(root)
input_frame.pack(pady=5, fill='both')
# 设置一个可变变量接受输入参数
input_va = tk.StringVar()
tk.Label(input_frame, text='输入地址：', font=('黑体', 20)).pack(side=tk.LEFT)
tk.Entry(input_frame, width=90, relief='flat', textvariable=input_va).pack(side=tk.LEFT, fill='both')

# 解析按钮
tk.Button(root, text='GO----->解析地址', font=('黑体', 15), relief='flat', bg='#449d44', command=show).pack(fill='both')

#让窗口持续呈现
root.mainloop()
